package gorm

import (
	"fmt"
	"gorm.io/driver/mysql"
	"gorm.io/gorm"
	"gorm.io/gorm/logger"
	"gorm.io/gorm/schema"
	"myublog/global"
	"myublog/global/vipers"
	"myublog/model"
	"os"
	"time"
)

var (
	err    error
)
func InitDb() {
	dns := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?%s&parseTime=True&loc=Local",
		vipers.DbUser,
		vipers.DbPassWord,
		vipers.DbHost,
		vipers.DbPort,
		vipers.DbName,
		vipers.DBCharset,
	)
	global.GormDb, err = gorm.Open(mysql.Open(dns), &gorm.Config{
		// gorm日志模式：silent
		Logger: logger.Default.LogMode(logger.Silent),
		// 外键约束
		DisableForeignKeyConstraintWhenMigrating: true,
		// 禁用默认事务（提高运行速度）
		SkipDefaultTransaction: true,
		NamingStrategy: schema.NamingStrategy{
			// 使用单数表名，启用该选项，此时，`User` 的表名应该是 `user`
			SingularTable: true,
		},
	})

	if err != nil {
		global.ZapLogger.Error("连接数据库失败:"+err.Error())
		fmt.Println("连接数据库失败，请检查参数：", err)
		os.Exit(1)
	}
	global.ZapLogger.Info("连接mysql数据库成功:")
	// 迁移数据表，在没有数据表结构变更时候，建议注释不执行
	_ = global.GormDb.AutoMigrate(&model.User{}, &model.Article{}, &model.Category{}, &model.DetailsUser{}, &model.Comment{},&model.Blog{})

	sqlDB, _ := global.GormDb.DB()
	// SetMaxIdleCons 设置连接池中的最大闲置连接数。
	sqlDB.SetMaxIdleConns(10)

	// SetMaxOpenCons 设置数据库的最大连接数量。
	sqlDB.SetMaxOpenConns(100)

	// SetConnMaxLifetiment 设置连接的最大可复用时间。
	sqlDB.SetConnMaxLifetime(10 * time.Second)
}
